System.out.println("Complete started");
 
wt.org.WTPrincipalReference obj=((wt.workflow.work.WfAssignedActivity)self.getObject()).getParentProcess().getCreator();
processInitiator=(wt.org.WTUser)obj.getPrincipal();
 
java.util.Enumeration assignments = ((wt.workflow.work.WfAssignedActivity)self.getObject()).getAssignments();
while (assignments.hasMoreElements()) 
{
    System.out.println("Within while loop");
	wt.workflow.work.WfAssignment assignment = (wt.workflow.work.WfAssignment) assignments.nextElement();
	java.util.Enumeration workitems= wt.fc.PersistenceHelper.manager.navigate(assignment,wt.workflow.work.WorkItemLink.WORK_ITEM_ROLE,wt.workflow.work.WorkItemLink.class);

	 while (workitems.hasMoreElements()) 
	 {
		wt.workflow.work.WorkItem workitem = (wt.workflow.work.WorkItem) workitems.nextElement();
		String name=workitem.getCompletedBy();
		completedBy=(WTUser) wt.org.OrganizationServicesHelper.manager.getPrincipal(name);
		System.out.println(completedBy.getName());     
      }
 }
 
 ==============
 
 // NOTE: SIMPLY UNCOMMENT OUT THE DESIRED PBO SECTION YOU WANT TO USE
 
 
 // WTDOC
 
 //java.lang.String doc_pbo_name = ((wt.doc.WTDocument) primaryBusinessObject).getName();
 //java.lang.String doc_pbo_number = ((wt.doc.WTDocument) primaryBusinessObject).getNumber();
 //String url = null;
 //wt.doc.WTDocument doc = (wt.doc.WTDocument)primaryBusinessObject;
 //if(doc!=null){    
 //    wt.doc.WTDocument latDoc = (wt.doc.WTDocument)wt.vc.VersionControlHelper.service.getLatestIteration(doc,true);
 //    com.ptc.netmarkets.model.NmOid oid = new com.ptc.netmarkets.model.NmOid("WTDocument", latDoc.getPersistInfo().getObjectIdentifier());
 //    com.ptc.netmarkets.util.beans.NmURLFactoryBean bean = new com.ptc.netmarkets.util.beans.NmURLFactoryBean();
 //    url = com.ptc.netmarkets.util.misc.NetmarketURL.buildURL(bean, "object", "view", oid);
 //    System.out.println("URL to Document is: " + url); 
 //}
 
 // END
 
 
 // WTPART
 
 //java.lang.String part_pbo_name = ((wt.part.WTPart) primaryBusinessObject).getName();
 //java.lang.String part_pbo_number = ((wt.part.WTPart) primaryBusinessObject).getNumber();
 //String url = null;
 //wt.part.WTPart part = (wt.part.WTPart)primaryBusinessObject;
 //if(part!=null){    
 //   wt.part.WTPart latPart = (wt.part.WTPart)wt.vc.VersionControlHelper.service.getLatestIteration(part,true);
 //    com.ptc.netmarkets.model.NmOid oid = new com.ptc.netmarkets.model.NmOid("WTPart", latPart.getPersistInfo().getObjectIdentifier());
 //    com.ptc.netmarkets.util.beans.NmURLFactoryBean bean = new com.ptc.netmarkets.util.beans.NmURLFactoryBean();
 //    url = com.ptc.netmarkets.util.misc.NetmarketURL.buildURL(bean, "object", "view", oid);
 //    System.out.println("URL to Part is: " + url); 
 //}
 
 // END
 
 
 // EPMDOC
 
 java.lang.String epm_pbo_name = ((wt.epm.EPMDocument) primaryBusinessObject).getName();
 java.lang.String epm_pbo_number = ((wt.epm.EPMDocument) primaryBusinessObject).getNumber();
 String url = null;
 wt.epm.EPMDocument epmdoc = (wt.epm.EPMDocument)primaryBusinessObject;
 if(epmdoc!=null){    
    wt.epm.EPMDocument latEpmDoc = (wt.epm.EPMDocument)wt.vc.VersionControlHelper.service.getLatestIteration(epmdoc,true);
     com.ptc.netmarkets.model.NmOid oid = new com.ptc.netmarkets.model.NmOid("EPMDocument", latEpmDoc.getPersistInfo().getObjectIdentifier());
     com.ptc.netmarkets.util.beans.NmURLFactoryBean bean = new com.ptc.netmarkets.util.beans.NmURLFactoryBean();
     url = com.ptc.netmarkets.util.misc.NetmarketURL.buildURL(bean, "object", "view", oid);
     System.out.println("URL to Part is: " + url); 
 }
 
 // END
 
 
 // ***** CAPTURE VARIABLES FOR USER WHO COMPLETES PRIOR WORKFLOW TASK AND ALSO PROCESS INITIATOR *****
 
 wt.org.WTUser user=completedBy;
 String senderEmail=user.getEMail();//get the email address
 System.out.println("\n\n\t\tWithin Expression Robot:: Email will be sent to "+senderEmail);
  
 wt.org.WTUser toUser=processInitiator;
 String toEmail=toUser.getEMail();//get the email address
 System.out.println("\n\n\t\tWithin Expression Robot:: Email will be sent to "+toEmail);
 
 // ***** END SECTION *****
 
 
 // ***** THE FOLLOWING SECTION PROVIDES THE ABILITY TO INVOKE A CUSTOM EMAIL WHICH CALLS THE VARIABLES DEFINED/CAPTURED ABOVE *****
 
 // SEE <WT_HOME>\tasks\wt\mail\Sendmail.xml FILE FOR MORE INFORMATION ON SUPPORTED FIELDS
 
 // MAKE SURE TO UPDATE PBO NAME/NUMBER WITH APPROPRIATE VARIABLES FROM ABOVE!!!!!
  
 //Instantiate a new SendMail task
 com.infoengine.SAK.Task newmail = new com.infoengine.SAK.Task("wt/mail/SendMail.xml");
  
 //Set parameters . Modify as needed
 newmail.addParam("FROM",senderEmail);
 newmail.addParam("TO", toEmail);
 newmail.addParam("SUBJECT", "your object "+epm_pbo_name+"has been approved");
 newmail.addParam("CONTENT", url);
  
 //Send the mail
 System.out.println("\n\n\t\t*********About to invoke SendMail.xml************");
 newmail.invoke();
 
// END